[AWS SDK for Node.js]API実行にかかった時間の測定をするtips
リクエスト時間を測定
この記事ではイベントリスナを使用して、任意のタイミングでコールバックを登録してみました。 この仕組みを利用すれば、aws-sdkを使用してAWSから結果を受け取るまでどのくらいかかったのか、 いちいち時間をチェックするためのコードを記述しなくても、AWS.eventsにイベントリスナを登録するだけで時間を測定できます。
環境構築方法
今回使用した動作環境は以下のとおりです。
- OS : MacOS X 10.7.4
- Node.js : v0.8.15
- npm : 1.1.66
- aws-sdk : 0.9.5-pre.6
まだaws-sdkをインストールしていなければ、npmでaws-sdkをインストールします。 また、他の記事にあるように、aws.jsonというファイルにAWSアカウント情報を記述しておきましょう。
% mkdir sample % cd sample % npm install aws-sdk
リクエスト時間を測るサンプルコード
時間を測定するためのコードは単純です。AWS.eventsのsendイベント(AWSへリクエスト開始)に測定を開始し、 completeイベント(AWSからレスポンスを受け取った)のタイミングで測定を終了し、かかった時間を表示します。 これをAPI実行前に記述しておけばOKです。
・ ・ AWS.events.on('send', function startSend(resp) { resp.startTime = new Date().getTime(); }).on('complete', function calculateTime(resp) { var time = (new Date().getTime() - resp.startTime) / 1000; console.log(resp.request.operation + ':' + time + ' seconds'); }); ・ ・
上記コードを記述後、EC2用とSNS用のAPIをよびだしてみましょう。
var ec2 = new AWS.EC2(); var sns = new AWS.SNS(); ec2.client.describeInstances(function(err,data){ //何かの処理 }); sns.client.listTopics(function(err,data){ //何かの処理 });
作成したファイルを実行してみます。 completeイベントのタイミングで、操作名とかかった時間か表示されてますね。
% node app.js describeInstances:0.787 seconds listTopics:0.812 seconds
まとめ
非常に簡単に時間測定を組み込むことができました。 NODE_ENVなどの環境変数を確認して、開発時だけAWS.eventsへの登録が有効化するようにしておけば便利に使えそうです。 また、これを利用すれば、AWSへのアクセス前後にいろいろと独自処理を挟むことができますね。